package com.wyw.function.learning.demo10;

import java.util.Arrays;
import java.util.List;

/**
 * @Title   模拟异常
 * @Description     虽然方便，但是使用Lambda不容易查错，一旦异常很难定位问题
 * @Author Mr Wu yewen.wu.china@gmail.com
 * Update History:
 * Author        Time            Content
 */
public class DemoClient29 {
    /**
     * 样例1
     *  像这种错误发生在Lambda表达式内部。由于Lambda表达式没有名字，所以编译器只能为其指定一个名字，比如 lambda$main$0(
     * @param args
     */
//    public static void main(String[] args) {
//        List<Point> points = Arrays.asList(new Point(1, 2), null);
//        points.stream().map(point -> point.getX()).forEach(System.out::println);
//    }

    /**
     * 样例2
     * @param args
     */
//    public static void main(String[] args) {
//        List<Integer> list = Arrays.asList(1, 2, 3, 4, 4, 5);
//        list.stream()
//                .map(DemoClient29::divideByZero)
//                .forEach(System.out::println);
//    }
//
//    public static int divideByZero(int n) {
//        return n / 0;
//    }

    /**
     * 样例3
     *  使用peek调试
     * @param args
     */
    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 4, 5);
        list.stream()
                .peek(x-> System.out.println("from stream " + x))
                .map(x -> x + 17)
                .peek(x-> System.out.println("from map " + x))
                .filter(x -> x%2==0)
                .peek(x-> System.out.println("from filter " + x))
                .forEach(System.out::println);

    }

}
